Deklaration einer Klasse in ST

Syntax
CLASS (* optional_begin *) FINAL|ABSTRACT (* optional_end *) class_name_2
 
(* optional_begin *) USING Namespace_1;
USING Namespace_2; (* optional_end *)
 
(* optional_begin *) EXTENDS class_name_1 (* optional_end *)
 
(* optional_begin *) IMPLEMENTS interface_1, interface_2, ... interface_n (* optional_end *)
 
(* optional: declaration of variables/instances *)
 
(* optional: declaration of methods *)
 
END_CLASS
Bedeutung

Deklaration einer →Klasse (ein Feature der →objektorientierte Programmierung) , wobei class_name_2 ein →IEC-Bezeichner sein muss.
Die Deklaration ist in einem ST-Objekt möglich – darin erfolgt die Deklaration entweder im globalen →Namespace oder in einem deklarierten Namespace. CLASS und END_CLASS sind die →Schlüsselwörter für die Deklaration der Klasse.

Beachten Sie, dass eine Klasse ähnlich einem →Funktionsbaustein ist, der die Funktionen der objektorientierten Programmierung verwendet. Gemäß der →IEC-Norm bestehen die folgenden Unterschiede:

  • Die Schlüsselwörter FUNCTION_BLOCK und END_FUNCTION_BLOCK werden durch CLASS und END_CLASS ersetzt.

  • Variablen werden nur im Abschnitt VAR deklariert. Die Abschnitte VAR_INPUT, VAR_OUTPUT, VAR_IN_OUT und VAR_TEMP sind nicht erlaubt.

    Gemäß der IEC-Tabelle 48 "Class" (Zeilen 4a und 4b) werden Variablen auch im VAR_EXTERNAL-Abschnitt deklariert.

  • Eine Klasse hat keinen Body. Eine Klasse darf nur Methoden definieren.

  • Ein Aufruf einer Instanz einer Klasse ist nicht möglich. Nur die Methoden einer Klasse können aufgerufen werden.

Details zu den optionalen Schlüsselwörtern FINAL, ABSTRACT, EXTENDS, IMPLEMENTS siehe "Deklaration eines Funktionsbausteins in ST". Beachten Sie:

  • EXTENDS leitet die Klasse von einer anderen Klasse ab (der Basis-Klasse).

  • IMPLEMENTS implementiert ein oder mehrere →Interfaces in der Klasse.

Die USING-Namespace-Anweisung nach dem Namen der Klasse ist ebenfalls optional. Siehe "Namespaces in ST: Verwendung" für Details für diese Anweisung.

Beispiel 1: Klasse mit Methoden
Class CCounter
 VAR
 m_iCurrentValue : DINT; (* Default = 0 *)
 m_bCountUp : BOOL:=TRUE;
 END_VAR
 VAR PUBLIC
 m_iUpperLimit : DINT:=+40;
 m_iLowerLimit : DINT:=-40;
 END_VAR
 METHOD PUBLIC Count : DINT
 IF (m_bCountUp AND m_iCurrentValue<m_iUpperLimit) THEN
 m_iCurrentValue:= m_iCurrentValue+1;
 END_IF;
 IF (NOT m_bCountUp AND m_iCurrentValue>m_iLowerLimit) THEN
 m_iCurrentValue:= m_iCurrentValue-1;
 END_IF;
 Count := m_iCurrentValue;
 END_METHOD
 METHOD public SetDirection
 VAR_INPUT
 bCountUp : BOOL;
 END_VAR
 m_bCountUp:=bCountUp;
 END_METHOD
END_CLASS

In einer Klasse dürfen Sie die folgenden Sprachelemente für ST verwenden:

Durch die Verwendung von Sprachelementen können Sie auch andere Elemente (z.B. Deklaration von STRING-Variablen im Abschnitt VAR ... END_VAR) verwenden. Dieses Elemente sind in der obigen Liste nicht angeführt.